package com.gqzm.iaas.utils;

import com.gqzm.iaas.domain.bo.*;
import com.gqzm.iaas.enums.ErrorCode;
import lombok.experimental.UtilityClass;

import java.util.List;

/**
 * @ClassName: {@link ResultUtils}
 * @description: 响应错误码处理
 * @author: peter qin
 * @date: 2023 07 14
 * @version: 1.0
 **/
@UtilityClass
public class ResultUtils {

    /**
     * 返回结果对象
     *
     * @param data 数据对象
     * @param <T> 泛型类型
     * @return <T></T>
     */
    public static <T> Result<T> result(T data) {
        return Result.<T>builder()
                .errorCode(ErrorCode.SUCCESS.getErrorCode())
                .message(ErrorCode.SUCCESS.getMessage())
                .data(data)
                .build();
    }


    /**
     * 返回列表数据
     *
     * @param data 列表数据
     * @param <T> 泛型
     * @return <T>
     */
    public static <T> ListResult<T> listResult(List<T> data) {
        return ListResult.<T>builder()
                .errorCode(ErrorCode.SUCCESS.getErrorCode())
                .message(ErrorCode.SUCCESS.getMessage())
                .data(data)
                .build();
    }


    /**
     * 分页查询结果处理
     *
     * @param page
     * @param <T>
     * @return
     */
//    public static <T> PageResult<T> pageResult(IPage<T> page) {
//        return pageResult(
//                page.getCurrent(),
//                page.getSize(),
//                page.getTotal(),
//                page.getRecords());
//    }


    /**
     * void成功返回
     *
     * @return
     */
    public static VoidResult success() {
        return VoidResult.builder()
                .errorCode(ErrorCode.SUCCESS.getErrorCode())
                .message(ErrorCode.SUCCESS.getMessage())
                .build();
    }


    /**
     * 分页查询结果处理
     *
     * @param pageNum
     * @param pageSize
     * @param totalNum
     * @param data
     * @param <T>
     * @return
     */
    public static <T> PageResult<T> pageResult(
            long pageNum,
            long pageSize,
            long totalNum,
            List<T> data) {
        return PageResult.<T>builder()
                .errorCode(ErrorCode.SUCCESS.getErrorCode())
                .message(ErrorCode.SUCCESS.getMessage())
                .data(PageData.<T>builder()
                        .paging(Paging.builder()
                                .pageNum(pageNum)
                                .pageSize(pageSize)
                                .totalNum(totalNum)
                                .build())
                        .data(data)
                        .build())
                .build();
    }



}
